const {getOptions}  =require('loader-utils')
//验证babel-loader的合法性
const {validate} = require('schema-utils');
const babelSchema = require('./babelSchema.json')
const babelCore = require('@babel/core');
const utils = require('util')

//babel.transform用来编译代码的方法 是一个普通异步方法
//util.promisify 将普通异步方法转化成基于promise的异步方法
const transform = utils.promisify(babelCore.transform)

module.exports = function(content,map,meta){

    //获取loader中的options配置
    const options  = getOptions(this) || {}

    //验证babel-loader的合法性
    validate(babelSchema,options,{
        name:'Babel Loader'
    })

    //创建异步
    const callback = this.async()

    transform(content,options)
        .then(({code,map})=>{callback(null,code,map,meta)})
        .catch(e=>{callback(e)})
}